def move(src: list[int], tar: list[int]):
    """移动一个圆盘"""
    # 从 src 顶部拿出一个圆盘
    pan = src.pop()
    # 将圆盘放入 tar 顶部
    tar.append(pan)


# 将n-1 个圆盘  借助 C 从 A 移至 B 。
# 将剩余1个圆盘  从 A 直接移至 C 。
# 将n-1个圆盘   借助 A 从 B 移至 C
def dfs(i: int, src: list[int], buf: list[int], tar: list[int]):
    """求解汉诺塔问题 f(i)"""
    # 若 src 只剩下一个圆盘，则直接将其移到 tar
    if i == 1:
        move(src, tar)
        return
    # 子问题 f(i-1) ：将 src 顶部 i-1 个圆盘借助 tar 移到 buf
    dfs(i - 1, src, tar, buf)
    # 子问题 f(1) ：将 src 剩余一个圆盘移到 tar
    move(src, tar)
    # 子问题 f(i-1) ：将 buf 顶部 i-1 个圆盘借助 src 移到 tar
    dfs(i - 1, buf, src, tar)


A = [1,3,2,5,2,3,4,5,67,8,6]
B = []
C = []
i = len(A)
dfs(i, A, B, C)

print(A,B,C)

# 1. 计算汉诺塔中移动盘子的总次数
# 2. 打印出汉诺塔中每个盘子的移动记录